package com.yj.rselasticsearch.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yj.common.constant.DataConstants;
import com.yj.common.core.domain.AjaxResult;
import com.yj.common.core.domain.entity.FileInfo;
import com.yj.common.core.domain.entity.FileType;
import com.yj.common.core.domain.entity.SysDept;
import com.yj.common.utils.FastUtils;
import com.yj.common.utils.SecurityUtils;
import com.yj.rselasticsearch.domain.dto.FileTypeDto;
import com.yj.rselasticsearch.service.FileInfoService;
import com.yj.rselasticsearch.service.FileTypeService;
import com.yj.system.service.ISysDeptService;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * (fileType)表控制层
 *
 * @author LUOY
 */
@RestController
@RequestMapping("/fileType")
public class FileTypeController {
    /**
     * 服务对象
     */
    @Resource
    private FileTypeService fileTypeService;

    @Resource
    private ISysDeptService sysDeptService;

    @Resource
    private FileInfoService fileInfoService;

    /**
     * 新增文档分类
     *
     * @return
     */
    @PutMapping("add")
    public AjaxResult add(@RequestBody FileType fileType) {
        fileType.setCreateBy(SecurityUtils.getLoginUser().getUsername());
        return AjaxResult.success(fileTypeService.save(fileType));
    }

    /**
     * 获取文档类型列表
     *
     * @return
     */
    @GetMapping("list")
    public AjaxResult list() {
        return fileTypeService.fileTypeList();
    }

    /**
     * 获取文档类型列表
     *
     * @return
     */
    @GetMapping("deptTypeList")
    public AjaxResult deptTypeList() {
        return fileTypeService.deptFileTypeList();
    }

    /**
     * 获取文档类型列表
     *
     * @return
     */
    @PostMapping("pageList")
    public AjaxResult pageList(@RequestBody FileTypeDto fileTypeDto) {
        return fileTypeService.getFileTypeByPage(fileTypeDto);
    }

    /**
     * 更新文档类型
     *
     * @param fileType
     * @return
     */
    @PutMapping("update")
    public AjaxResult update(@RequestBody FileType fileType) {
        //如果文档类型已经被引用，则不允许被删除
        List<FileInfo> fileInfoList = fileInfoService.list(new LambdaQueryWrapper<FileInfo>().
                eq(FileInfo::getFileTypeId,fileType.getFileTypeId()).eq(FileInfo::getStatus,0));
        if(fileInfoList!=null&&fileInfoList.size()>0){
            return AjaxResult.error(500,"当前分类存在已经使用得文档数据，请先删除文档数据！");
        }
        fileType.setUpdateBy(SecurityUtils.getLoginUser().getUsername());
        return AjaxResult.success(fileTypeService.updateById(fileType));
    }

    /**
     * 删除文档类型
     *
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public AjaxResult delete(@PathVariable Integer id) {
        //如果文档类型已经被引用，则不允许被删除
        List<FileInfo> fileInfoList = fileInfoService.list(new LambdaQueryWrapper<FileInfo>().
                eq(FileInfo::getFileTypeId,id).eq(FileInfo::getStatus,0));
        if(fileInfoList!=null&&fileInfoList.size()>0){
            return AjaxResult.error(500,"当前分类存在已经使用得文档数据，请先删除文档数据！");
        }
        FileType fileType = fileTypeService.getById(id);
        fileType.setUpdateBy(SecurityUtils.getLoginUser().getUsername());
        fileType.setStatus(DataConstants.Number.ONE);
        return AjaxResult.success(fileTypeService.updateById(fileType));
    }
}
